23-5. メ−ルストアをアプライアンスへ (1) 現行メ−ルサ−バ周りの様子 `2c/05 * UTM に交換した後での確認 □hosA' sendmail,named [ hostB の状態 ] それぞれ #hostnameは |.3 hostA,hostB,hostY で ------------------ 202.241.128.0 /etc/nsswitch.conf Sun Solaris 9 である。 | □hostA ------------------ |.2 |.1 |hosts: files dns hostAはMail-Relay で UTM □------------ 192.168.2.0 Ultra45。hostB はMai | □hostB □hostY △ /etc/resolv.conf l-Store で今は Blade |.2 |.1 |.9 |.7 --------------------- 2500。hostYは Mail-S -------------------------------- |domain nix.co.jj tore の予備機で V210。 192.168.1.0 |nameserver 202.241.128.3 [ hostB & hostY ] /usr/lib/mail/cf/sendmail-tx /etc/mail/local-host-names ------------------------------------------- -------------------------- |define(`SMART_HOST', `smtp:[192.168.2.1]') |nix.co.jj [ hostB ] /etc/hosts [ hostY ] /etc/hosts ------------------------------------------- ------------------------------------ |192.168.1.1 hostB hostB. hostB.nix.co.jj |192.168.1.9 hostY hostY.nix.co.jj |202.241.128.3 hostA ↑ |202.241.128.3 hostA | [ hostA ] hostB. と hostA. は使われているのか不明。歴史的経緯で記述してた。 | /etc/hosts ↓ /etc/resolv.conf ---------------------------------------- --------------------- |192.168.2.1 hostA hostA. mail.nix.co.jj |domain nix.co.jj |192.168.1.1 hostB |nameserver 127.0.0.1 /etc/mail/access /etc/mail/mailertable /etc/nsswitch.conf --------------------------- ------------------------------ ------------------ |Connect: 192.168.1.1 RELAY |nix.co.jj esmtp:[192.168.1.1] |hosts: files dns |To: nix.co.jj RELAY |nix.co.jj RELAY nix.co.jj.zone xxx.mc /etc/mail/sendmail.cf -------------------------------- ------------------------------------------ |@ IN SOA ns0.nix.co.jj. |DwhostA | IN MX 10 mail.nix.co.jj. |Dmnix.co.jj |ns0 IN A 202.241.128.3 |FEATURE(`masquerade_entire_domain')dnl |mail IN A 202.241.128.3 |FEATURE(`nocanonify',`canonify_hosts')dnl |hostG IN A 202.241.128.2 |FEATURE(`accept_unresolvable_domains')dnl |hostA IN A 202.241.128.3 |FEATURE(`accept_unqualified_senders')dnl MS にある InterScan7はパタ−ンファイルを取って来るのにDNSを見て、トレンドマイ クロのサイトに HTTP アクセスして取ってくる。これは hostB の nsswitch.conf ファイ ルで "hosts: files dns" 指定しているから。もし "hosts: files" にしてDNSを見な いようにする場合は、サイト名のIPアドレスをあらかじめ調べておいて /etc/hosts に IPアドレスを書いておく。パタ−ンファイルの配布サイトは akamai を使っている。い つIPアドレスが変わるかはアカマイの都合なので、毎回DNSを引く方がいいかも。 * メ−ルストアの予備機のメ−ル送信確認 ファイアウォ−ルを置き換えして、予備のメ−ルストアもちゃんと機能するのかやってみ た。いかん!メ−ルが出てかない。おかしいぞ。どうなっている。確か以前はDNSを見 ないように sendmail.cf を設定したはずなのだが。 何かどうもDNSを見ようとしてい るみたい。仕方ない。もう少し UTM の設定とのことでおさらいをするか。まだ UTM での IPアドレス変換の動きとファイアウォ−ルのル−ルであやふやなところがあるぞ。 hostY# grep 127.0.0.1 sendmail-rx.cf hostB# grep 127.0.0.1 sendmail-rx.cf DSesmtp:[127.0.0.1] DSesmtp:[127.0.0.1] DHesmtp:[127.0.0.1] DHesmtp:[127.0.0.1] A=TCP 127.0.0.1 10025 A=TCP [127.0.0.1] 10025 A=TCP 127.0.0.1 10025 A=TCP [127.0.0.1] 10025 A=TCP 127.0.0.1 10025 A=TCP [127.0.0.1] 10025 A=TCP 127.0.0.1 10025 A=TCP [127.0.0.1] 10025 A=TCP 127.0.0.1 10025 A=TCP [127.0.0.1] 10025 A=TCP 127.0.0.1 10025 A=TCP [127.0.0.1] 10025 パソコン 192.168.1.7 の Outlook から、 自宅パソコンの ikken@tcp.or.jj へメ−ルを 送ってみる。エラ−になって出て行かない。Outlook でメ−ル送信サ−バを予備機のマシ ン 192.168.1.9 Mail-Store を指定して。受信も 192.168.1.9 にしたら、 次のエラ−メ −ルが出ていた。 -------------------------------------------------------------------------------- |差出人: Mail Delivery Subsystem [MAILER-DAEMON] |宛先 : user1@nix.co.jj |件名 : Returned mail: see transcript for details |------------------------------------------------------ |The original message was received at Tue, 29 ... (JST) |from localhost [127.0.0.1] | | ----- The following adresses had permanent fatal errors ----- | | (reason: 550 5.7.1 ... Relaying denied. IP name lookup 続く | failed [192.168.1.9]) | ----- Transcript of session follows ----- |... while talking to [192.168.2.1]: |>>> DATA |<<< 550 5.7.1 ... Relaying denied. IP name lookup failed 続く |550 5.1.1 ... User unknown [192.168.1.9] |<<< 503 5.0.0 Need RCPT (recipient) << user1 から ikken へ駄目な様子 >> hostY のシステムログにて。 # cat /var/log/syslog.0 May 29 18:33:53 hostB sendmail ... from=, ... proto=SMTP, daemo n=MTA-RX, relay=[192.168.1.7] May 29 18:33:53 hostB sendmail ... from=, ... proto=ESMTP, daem on=MTA, relay=localhost [127.0.0.1] May 29 18:33:54 hostB sendmail ... to=, ... relay=127.0.0.1 [12 7.0.0.1], stat=Sent (Message accepted for delivery) May 29 18:33:54 hostB sendmail ... to=, ... relay=[192.168.2.1] [192.168.2.1], stat=User unknown May 29 18:33:54 hostB sendmail ... DSN: User unknown May 29 18:33:54 hostB sendmail ... to=, ... mailer=local, relay =local, stat=Sent << 外にメ−ル送信できた際の様子 >> Outlook のメ−ルヘッダ−。 hostB /etc/hosts hostA /etc/hosts -------------------- ------------------- ここ追加したら外へメ−ル送信 |192.168.1.1 hostB |192.168.2.1 hostA ができた。適切にはhostY する |202.241.128.3 hostA |192.168.1.1 hostB ところ dummy としてみた。 ホ |192.168.1.9 dummy << スト名は何でも構わないみたい。 ns0.nix.co.jj はDNSに記述している 202.241.128.3 のホスト名である。 hostA.nix.co.jj は hostB マシンの /etc/hosts に記述しているホスト名。 Received: from ns0.nix.co.jj (HELO hostA.nix.co.jj) ([202.241.128.3]) by atom.tcp-net.ad.jj with ESMTP; Received: from hostB.nix.co.jj (dummy [192.168.1.9]) << ここに dummy がでてくる。 by hostA.nix.co.jj (8.14.1/8.14.1) with ESMTP for ; Received: from hostB.nix.co.jj (localhost [127.0.0.1]) by hostB.nix.co.jj (8.12.10+Sun/8.12.10) with ESMTP for Received: from user1 ([192.168.1.7]) << パソコンのIPアドレス。 by hostB.nix.co.jj (8.12.10+Sun/8.12.10) with SMTP for From: "user1" ※hostY の /etc/nsswitch.conf は "hosts: files" To: "ikken" でもOK。hostY の sendmail-rx.cf は "A=TCP [ Subject: ABC 127.0.0.1] 10025" でもOK、メ−ル送信できた。 hostA の /etc/hosts で "192.168.1.1 hostB" としてあるところ。"192.168.1.1 zzz"で も何でもホスト名は構わない。本番機が故障して予備機に置き換えて、本番機のホスト名 をそのままにしていた。それでも問題なくメ−ルをさばいていた。要はメ−ルストアから のメ−ルが来たら、発信元のIPアドレスのホスト名を調べるのだが、ホスト名は適当な のでも構わないということである。今回そのことを改めて認識したという話。 * メ−ル送信のル−ル設定 << MS->MR->外 MSはhostY >> [ MS から MR へのメ−ル ] ---------------------------------------------- hostY から hostA、192.168.1.9 か |LAN -> DMZ | ら 192.168.2.1 への SMTP通信。 | hostY hostA SMTP ACCEPT 〆NATなし | ---------------------------------------------- hostY の sendmail-tx の define(`SMART_HOST',`smtp:[192.168.2.1]') を見てのこと。 [ MR から MS へのメ−ル ] ---------------------------------------------- hostA から hostY、192.168.2.1 か |DMZ -> LAN | ら 192.168.1.1 への SMTP通信。 | hostA hostB SMTP ACCEPT 〆NATなし | ---------------------------------------------- [ MR から 外 へのメ−ル ] ---------------------------------------------- |DMZ -> WAN | NATされて VIP_hostA で hostA' か | hostA all SMTP ACCEPT 〆NATあり | ら外の相手への SMTP通信。 ---------------------------------------------- * メ−ル受信のル−ル設定 << 外->MR->MS MSはhostB >> [ 外 から MR へのメ−ル ] ---------------------------------------------- 外の相手から hostA' へ、外の相手 |WAN -> DMZ | から 202.241.128.3 への SMTP通信。 | all VIP_hostA SMTP ACCEPT 〆NATなし | VIP_hostA は hostA の仮想IP。 ---------------------------------------------- [ MR から MS へのメ−ル ] ---------------------------------------------- hostA から hostY、192.168.2.1 か |DMZ -> LAN | ら 192.168.1.1 への SMTP通信。先 | hostA hostB SMTP ACCEPT 〆NATなし | にメ−ル送信で必要で設定した。 ---------------------------------------------- hostA の access の "Connect: 192.168.1.1 RELAY" と mailertable を見てのこと。 * DNSサ−バへの問い合わせ << MS をメ−ルストアの本備機 hostB で確認 >> [ MS から hostA' へのDNS問い合わせ ] ---------------------------------------------- 最初のル−ル "hostB all"の allは |LAN -> WAN | 202.241.128.3 というオブジェクト | hostB all DNS ACCEPT 〆NATあり | を仮想IPなしで定義して、hostA' |WAN -> DMZ | だけに hostBからアクセスできるよ | all VIP_hostA DNS ACCEPT 〆NATなし | うしてもいい、はず?。 ---------------------------------------------- hostB の resolv.conf は "nameserver 202.241.128.3" にしているので。 MS の hostB の sendmail は送信元のIPアドレスのホスト名をDNSサ−バに問い合わ せをして、MR でワ−ニングが出ていた。社内のパソコンで例えば 192.168.1.7 のメ−ル ソフトでメ−ル送信すると、MS の sendmail は 192.168.1.7 のホスト名を引こうとして MR のDNSサ−バに問い合わせる。 DNSサ−バでは、そんなホスト名は無いといって "RFC 1918 response from Internet for 7.1.168.192.in-addr.arpa" というログが MRの /var/adm/messages に出る。 これはDNSサ−バで *.1.168.192 はとりあえず何か返答 する記述を加えたことで、ログは出なくしている。しかし問い合わせのパケット、UDP 53 は MS から MR へは行っているはずである。MR は hostA' の 202.241.128.3 である。 今、本番機にしている BladeではどうもDNSを見るようにしないと、まるでメ−ル送信 ができない、らしい。V210 が故障して Blade に置き換えた際に、それで右往左往したの だ。Blade の sendmail-tx.cf の元 xxx.mc は FEATURE(`accept_unqualified_senders') を V210 に比べ追記している。 それに sendmail-rx.mc の 127.0.0.1 で括弧のあるなし ぐらいしか違いはない。メ−ルストアの予備機 hostY の V210 では、 それだけの違いの せいでかは分からないが、次のテストでDNSは関係なくメ−ル送信できるようである。 * DNSサ−バへの問い合わせ << MS をメ−ルストアの予備機 hostY にして >> もう少し確認、どうもおかしいような気がする hostB で snoop で見てみるとDNSのパ ケットが頻繁に飛び交っている。メ−ルソフトの SMTP を hostY の 192.168.1.9 を書い て user1@nix.co.jj へメ−ルを送り、hostY でも # snoop -r で監視した。192.168.1.9 と 192.168.1.7 間で SMTPの双方でやりとりしているのは出てくるのが、DNSパケット は出て来ない。hostY の /etc/switchconf は "hosts: files"。user1@nix.co.jj へメ− ルを送るのは、MR は関係なしで MS だけでのテストにするためである。 このメ−ルは受 信できた。以上のことから hostY の MSはパソコンのIPアドレスの逆引きはしてないの か、いやそうではない。念のため以下のテストをやったら、逆引きをしているようである。 [ hostY で switchconf に dns も書いてみた ] これでもメ−ルの送信はちゃんとできた。 /etc/switchconf /etc/resolv.conf ----------------- ------------------------- |hosts: files dns |nameserver 202.241.128.3 # snoop -r udp port 53 192.168.1.9 -> 202.241.128.3 DNS C 7.1.168.192.in-addr.arpa. Internet PTR? 202.241.128.3 -> 192.168.1.9 DNS R Error: 3(Name Error) (2) メ−ルデ−タの移行手段の検討 `2d/09 * メ−ルデ−タを移行する2つの手段 [ Solaris9 から FortiMail へのメ−ル移行 ] Solaris9 のマシンの Mail-Store を FortiMail に置き換える。その際メ−ルがこれまで の Mail-Store に残らないようにしたい。幾つかやり方を検討したが /etc/aliases でや れそうである。Solaris9 の Mail-Store を稼働させたまま FortiMail の Mail-Store も 稼働させる。現行 Mail-Store に来たメ−ルを FortiMail にも転送する。 現行マシンの sendmail-tx.cf でメ−ル転送の設定をする。 先ずは動作のテストとして Mail-Store の 予備機で試してみる。テスト用の sendmail-tx.cf を ZZZ.cf として作成し、動作確認を やってみる。今時 sendmail.cf をいじるとは、誰ばりできる芸当ではない。 ------- □MR MS現行とMS予備: Solaris9。MS新: FortiMail | | MS現 MS予 MS新 UTM □------ □ □ □ 一般的に社内用メ−ルサ−バのことをメ−ルス |.2 |.1 |.8 |.9 トアと呼ぶ。特に Solaris9 のメ−ルストアは ----------------------------- ここでは Mail-Store とも言うことにする。 [ FortiMail から FortiMail へのメ−ル移行 ] 多分、手段は1つしかない。IMAP4 のプログラムが動いていれば、IMAP4 のメ−ルデ−タ を FortiMail は吸い上げることができる。POP3 プログラムが動いていてもだめというこ と。本番FortiMail(A) が故障して予備FortiMail(B) にして、また (A) に戻す場合。(B) に溜まったメ−ルを (A) に移す。 今回、FortiMail-2000B と FortiMail-200D を購入し た。2000B は本番稼働機で、200D は予備機ないし動作検証用ではあるが、 2000B 故障の 際には役立てることを考えたい。しかし 2000B はオンサイト保守の契約にした。 1日あ ればたいがいの故障は直るだろう。その1日、半日待てるかどうかが判断の要になる。 * Solaris9 から FortiMail へのメ−ル移行の手段 1) Mail-Relay から両メ−ルストアへメ−ルを送る−その1 /etc/mail/mailertable で指示する。できない。 2) Mail-Relay から両メ−ルストアへメ−ルを送る−その2 バ−チャルドメインの指定をする。多分できる。 3) Mail-Store に来たメ−ルを FortiMailへも送る−その1 ~/.forward で指定する。できるが工数が多大。 4) Mail-Store に来たメ−ルを FortiMailへも送る−その2 /etc/aliases で指定する。できる、これでやる。 5) メ−ルボックスのメ−ルを移行するツ−ルを作る プログラムは久しく書いてない。できそうにない。 6) メ−ルボックスにアクセスするソフトを利用する Windows OS用の Radish やUNIXのソフト。 * 1) Mail-Relay から両メ−ルストアへメ−ルを送る−その1 -------------------------------------------------------------------------------- Mail-Relay の /etc/mail/mailertable で指示する。幾つか転送先を記述できるが、1つ しか転送できない。バックアップ用のメ−ルサ−バの指定に使われる機能である。 -------------------------------------------------------------------------------- Solaris9 のマシンの Mail-Store を FortiMail に置き換えるに当たり、Mail-Relayから 数日前から FortiMail、即ち新しい Mail-Store にもメ−ルを送るのである。もしこれが できると FortiMail には生のままのメ−ルが来る。これを利用して FortiMail でウィル スチェックとスパムチェックをやって、その性能をみることもできる。 /etc/mail/mailtertable 転送先が複数ある場合。host1.nix.co.jj に接続する。失敗し ------------------------------------------------------ たら host2.nix.co.jj へ。 |nix.co.jj smtp:host1.nix.co.jj:smtp:host2.nix.co.jj /etc/mail/access ----------------------------- |Connect: 192.168.1.1 RELAY 192.168.1.1 は現行の Mail-Store のIPアドレ |To: nix.co.jj RELAY ス。多分ここにも FortiMailのIPアドレスを記 |nix.co.jj RELAY 述しておくのだと思う。 [ こんな検討もした ] "17-5.sendmail-8.13.8 のコンパイル" commun5.txt /etc/mail/mailertable mailertable が主に関係するのはここ。もう1台 ------------------------------ のメ−ルストアである FortiMailのIPアドレス |nix.co.jj esmtp:[192.168.1.1] も、直感でこんなように記述してみればいいので |nix.co.jj esmtp:[192.168.1.9] ないか。調べたら実際の記述の仕方は違っていた。 xxx.mc の mailertable 指定は xxx.cf で下記のところで展開される。これを手作業でい じって何とかできないかと思ったが、とてもやできそうにない。調べていて mailertable は xxx.mc での SMART_HOST より先に評価されると書いてあるのがあった。 SENDMAIL CONFIGURATION FILE /sendmail-8.14.1/cf/cf/xxx.cf ---------------------------------------------------------------------- |### Ruleset 90 -- try domain part of mailertable entry |SMailertable=90 |R$* <$- . $+ > $* $: $1$2 < $(mailertable .$3 $@ $1$2 $@ $2 $) > $4 |R$* <$~[ : $* > $* $>MailerToTriple < $2 : $3 > $4 |R$* < . $+ > $* $@ $>Mailertable $1 . <$2> $3 |R$* < $* > $* $: < $(mailertable . $@ $1$2 $) > $3 |R< $~[ : $* > $* $>MailerToTriple < $1 : $2 > $3 |R< $* > $* $@ $2 no mailertable match [ こんな検討もした ] "15-1.メ−ルリレ−構成の基本と運用" mail_svr.txt MR MS 新MS sendmail.cf の 1) の記述が元々あった。2)を追 □hostG □hostB □hostY 加した。1) を評価して実行し、 更に下に行って |.1 |.2 |.9 2) も評価すればOK。しかし動きとしては 1)を -------------------------------- 評価したら 2) はスキップしてしまう。ダメだ!。 /etc/sendmail.cf 万能 sendmail.cf.relay /etc/hosts ---------------------------------------- ------------------- |# [ 1. メ−ルゲ−トウェイのホスト用 ] |192.9.200.1 hostG |R$*<@$D> $#$M $@hostB $:$1<@$D> 1) |192.9.200.2 hostB |R$*<@$D> $#$M $@hostY $:$1<@$D> 2) |192.9.200.9 hostY << 追加。 * 2) Mail-Relay から両メ−ルストアへメ−ルを送る−その2 -------------------------------------------------------------------------------- バ−チャルドメインの指定をする。多分これで現行 Mail-Store と FortiMail にメ−ル 転送できる。しかし Mail-Relay の予備マシンを用意するのが面倒である。 -------------------------------------------------------------------------------- メ−ルをコピ−して持って置くサ−バのことが記事であった。確かそんな記事があったと 思い探したら5分で見つけた。「Software Design」2006/08,P.58〜66, "ネットワ−ク運 用/管理 五輪書「弐:水の巻」、5章:安全運用のための Postfixバックアップ/二重化計 画"。 P.61〜62 の "メッセ−ジをひたすら保存しておくためのメ−ルサ−バを設置する" Postfix でのことで virtual テ−ブルを使う。/etc/postfix/virtual ファイルに設定を 記述する。まさに Mail-Relay から Mail-Store にきたメ−ルを もう1つの Mail-Store サ−バのマシンにコピ−するという、今考えている構成と同じである。 /etc/postfix/virtual Mail-Relay ホストで2つのサ−バにメ−ルを送る設定。どこか -------------------------------------------------- らか設定例を引っ張ってきた。 |@example.com @mail.example.com,@store.example.com これを sendmail で同じことができるか。Postfix の制御ファイルは sendmail とほぼ同 じなのでできるはず。"13-5.バ−チャルドメインなど" dns_next.txt でかつて検討した。 Mail-Relay の Sun SS5 のマシンを捨てずに置いてあったら、容易に確認テストができた のだが。半年前に捨ててしまった。HPの仮想マシンで Mail-Relay をやっぱり作るか。 * 3) Mail-Store に来たメ−ルを FortiMail へも送る−1 -------------------------------------------------------------------------------- ~/.forward で指定する。できるが全部のユ−ザでこの設定をしないといけない。 すごい 手間がかかる。サブドメインまたはホスト名付きのメ−ルアドレスに送るしかない。 -------------------------------------------------------------------------------- FortiMail ではサブドメイン部を取り除くか、メ−ルソフトでサブドメイン部のない表示 にするかである。FortiMail ではサブドメイン部を取り除くのは、各ユ−ザの設定で全部 で変換指示をしないといけない。Fortinet 社のエンジニアに尋ねてみた回答である。 Cobalt Qube3 でそれに近いことをやったことがあった。DMZに Qube3 を設置して、特 定のユ−ザのメ−ルを Qube3 に送り、 Webメ−ルでとりあえず読めるだけ読めるよう にした。"14-5.電子メ−ルのユ−ザ支援" mail_sup.txt でフォワ−ドの設定をした。 /usr/people/tomo/.forward メ−ルサ−バ hostB で Qube3 にもメ−ルを転送する。 --------------------------- これでどこからでも、Webメ−ルでメ−ルを読むこ |\tomo, tomo@qub3.nix.co.jj とができるようになる。実際に運用したことがある。 * 4) Mail-Store に来たメ−ルを FortiMail へも送る−2 次の章 "(3) メ−ルを Solaris9からFortiMailへ" を見られたい。 * 5) メ−ルボックスのメ−ルを移行するツ−ルを作る 既存のメ−ルストア、POP3 が動いていてメ−ルボックスがある。/var/mail/user ファイ ル。このファイルは届いたメ−ルのかたまり。基本的にはメ−ルは各自のパソコンに取り 込んでもらうようにしている。中にはメ−ルを残す設定にしているのもあるだろう。複数 の人で代表メ−ルをみるとかいう場合。このファイルをなめて、新しく設置するメ−ルス トアにメ−ルとして送るというのはどうだ。何かできそうな雰囲気がする。シェルスクリ プトを1つ書いてみるか。できそうだぞ。/var/mail/usr1,user2,... ここにメ−ルは溜 まっている。1個のメ−ルはどうなっているか。フォ−マットは。切り出せるか。メ−ル を送り直すことになるので、メ−ルの送信?時刻が変わってしまうな。 * 6) メ−ルボックスにアクセスするソフトを利用する `2e/01 頭の中をちらちらしていた Radish というソフト、携帯電話にメ−ルを転送するソフトと 仕組みとしては同じじゃないかと思い付いた。メ−ル転送ソフトは POP3 サ−バにアクセ スして携帯電話で見れるように改行コ−ドを付け変えたり、パケット代を節約するため添 付ファイルを取り除いたりして携帯電話に転送する。POP3サ−バにアクセスするのでこの ソフトの中にユ−ザのアカウントを記載する。 Windows パソコンで動く Radish というソフトは複数のメ−ルサ−バの間で、メ−ルの取 得や転送が柔軟にできるのでないか。そもそもは Windows OSで動く SMTPサ−バ、POP3 サ−バである。加えて POP3 クライアント?の機能もある。IMAP4 は対応しているのかな。 ただしここで使おうとすると、 Radish にメ−ルのアカウントと転送設定が全ユ−ザ分必 要になると思われる。Radish のことは "15-2. POP サ−バの仕組みと設定" に書いた。 "15-2.POPサ−バの仕組みと設定" には fetchmail と popclient と言うのも調べてい た。POP3 サ−バがあって、 別な POP3 サ−バにアクセスしてメ−ルを取ってくるソフト である。これを用いればUNIXマシンの POP3 サ−バ同士ならメ−ルデ−タを移動する なりコピ−するなりできそうである。 あるいは FortiMail の POP3 サ−バにアクセスし UNIXマシンに持って来るのはできそうである。 (3) メ−ルを Solaris9からFortiMailへ `2d/09 -------------------------------------------------------------------------------- "4) Mail-Store に来たメ−ルを FortiMail へも送る−2"。このやり方で実施。Solaris の /etc/aliases で user1 宛のメ−ルを user1@hostF として FortiMailへ転送をかける。 -------------------------------------------------------------------------------- * 現状のメ−ルサ−バの確認 MR□hosA' sendmail,named hostA: Mail-Relay Sun Solaris9 |.3 hostB: Mail-Store 現行 Solaris9 ------------------ 202.241.128.0 hostY: Mail-Store 予備 Solaris9 | □hostA hostF: Mail-Store 新規 FortiMail |.2 |.1 UTM □---------- MS現 MS予 MS新 PC .2| 192.168.2.0 □hostB □hostY □hostF △ | |.1 |.8 |.9 |.7 ---------------------------------------------------------- 192.168.1.0 [ Solaris9 の MS での内外からメ−ルの処理 ] ↓TCP/25 sendmail (sendmail-rx.cf) /var/spool/mqueue-rx ↓TCP/10025 InterScan でメ−ルの処理 /opt/trend/imss/queue/postpone ↓TCP/10026 sendmail (sendmail-tx.cf) /var/spool/mqueue << ここでメ−ルの転送処理をする。 * hostY の Mail-Store 予備機の現状設定 /usr/lib/mail/cf/sendmail-tx.mx の内容 ( rinne5.txt などから TTT.mc ) --------------------------------------- |OSTYPE(`solaris8') |DwhostY ※FEATURE(`no_default_msa') があるとxxx.cf に |Dmnix.co.jj "O DaemonPortOptions=Port=587,Name=MSA,M=E" |define(`confDOMAIN_NAME',`$w.$m') という記述が入らない。あればコメントにする。 |LOCAL_DOMAIN(`$m') |MASQUERADE_AS(`nix.co.jj') /etc/nsswitch.conf |MASQUERADE_DOMAIN(`nix.co.jj') ------------------ |FEATURE(`masquerade_entire_domain') |hosts: files |FEATURE(`no_default_msa') |DAEMON_OPTIONS(`Port=10026,Addr=127.0.0.1,Name=MTA') |define(`confTO_IDENT',`0s') |FEATURE(`use_cw_file') |dnl FEATURE(`accept_unqualified_senders') << Mail-Store 現行機では、ここはコメ |FEATURE(`accept_unresolvable_domains') ント外している。 nsswitch.conf は |define(`SMART_HOST',`smtp:[192.168.2.1]') "hosts: file dns" にしている。 |dnl LOCAL_NET_CONFIG {1} |dnl R$* < @ $* .$m. > $* $#smtp $@ $2.$m. $: $1 < @ $2.$m. > $3 {2} |MAILER(`local') ↑ |MAILER(`smtp') タブコ−ドはここ1ヶ所だけ。 メ−ルアドレスの展開を確認する ( 参考 "14-2.電子メ−ル設定の注意" mail_tst.txt ) # /usr/lib/sendmail -bt -C ZZZ.cf << -C/etc/mail/sendmail-tx.cf でも同じ。 ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) Enter
> 3,0 ikken@tcp.or.jj canonify input: ikken @ tcp . or . jj Canonify2 input: ikken < @ tcp . or . jj > Canonify2 returns: ikken < @ tcp . or . jj > canonify returns: ikken < @ tcp . or . jj > parse input: ikken < @ tcp . or . jj > Parse0 input: ikken < @ tcp . or . jj > Parse0 returns: ikken < @ tcp . or . jj > Parse1 input: ikken < @ tcp . or . jj > MailerToTriple input: < smtp : [192.168.2.1] > ikken < @ tcp . or . jj > MailerToTriple returns: $# smtp $@ [192.168.2.1] $: ikken <@ tcp. or . jj > Parse1 returns: $# smtp $@ [192.168.2.1] $: ikken <@ tcp. or . jj > parse returns: $# smtp $@ [192.168.2.1] $: ikken <@ tcp. or . jj > > 3,0 user1@hostF.nix.co.jj << > 3,0 user1@hostF でも同じだった。 canonify input: user1 @ hostF Canonify2 input: user1 < @ hostF > Canonify2 returns: user1 < @ hostF . nix . co . jj . > canonify returns: user1 < @ hostF . nix . co . jj . > parse input: user1 < @ hostF . nix . co . jj . > Parse0 input: user1 < @ hostF . nix . co . jj . > Parse0 returns: user1 < @ hostF . nix . co . jj . > Parse1 input: user1 < @ hostF . nix . co . jj . > MailerToTriple input: < smtp : [192.168.2.1] > user1 <@ hostF.nix.co.jj.> MailerToTriple returns: $# smtp $@ [192.168.2.1] $: user1 <@ hostF.nix.co.jj.> Parse1 returns: $# smtp $@ [192.168.2.1] $: user1 <@ hostF.nix.co.jj.> parse returns: $# smtp $@ [192.168.2.1] $: user1 <@ hostF.nix.co.jj.> -------------------------------------------------------------------------------- parse returns: $# smtp $@ [192.168.2.1] $: user1 <@ hostF.nix.co.jj.> ↓元はこのようだった。MailerToTriple から一部詰めて表示してみた。 parse returns: $# smtp $@ [ 192 . 168 . 2 . 1 ] $:1つブランクで続く user1 < @ hostF . nix . co . jj . > -------------------------------------------------------------------------------- 現状の設定状態で user1@hostF.nix.co.jjというメ−ルは外部宛のメ−ルと解釈されてい る。これまでこの形のメ−ルがあったとして、メ−ルが届いてないというクレ−ムは一度 もなかった。ということは、この形のメ−ルはなかったと判断していいだろう。送信元の メ−ルアドレスとしては xxx@intra.nix.co.jj とか、そんなのは幾つかは見られるが。 この sendmail-tx.mx の記述は、当時やってくれたSI業者のエンジニアさんによる。彼 は「sendmail と qmail による Linuxメ−ルサ−バ−構築ガイド」エ−アイ出版 2002.06 を参考にしていた。本を持ってきていた。ここら辺りの話は "4-6.再びインタ−ネット・ サ−バ (1)メ−ルサ−バの入れ替え"、ybase6.txt で書いた。 * Mail-Store 予備機と FortiMail でテスト --- ZZZ.mc 調整その1 user1@hostF.nix.co.jj で入ってきたのを、Mail-Relayに送ってしまわないようにしたい。 ZZZ.mc の {1} と {2} のコメントを外したら、ZZZ.cf のル−ル展開はできそうな感じに なった。/etc/hosts に "192.168.1.9 hostF.nix.co.jj" を記述すれば、飛んでいくだけ は飛んでいくはずである。 ただし FortiMail の方で user1@hostF.nix.co.jjを受ける設 定にしておかないといけないが。FortiMail でそのように設定して、メ−ルが届いたのを 確認はした。ただし FortiMail ではサブドメインの扱いとして設定するしかなかった。 # cd /usr/lib/mail/cf # cp TTT.mc ZZZ.mc << sendmail-tx.mc と TTT.mc は同じもの。 ZZZ.mc ------------------------------------------------------------------- | | |LOCAL_NET_CONFIG {1} |R$* < @ $* .$m. > $* $#smtp $@ $2.$m. $: $1 < @ $2.$m. > $3 {2} |MAILER(`local') |MAILER(`smtp') # /usr/ccs/bin/make ZZZ.cf << カレントディレクトリは /usr/lib/mail/cf/。 # /usr/lib/sendmail -bt -C ZZZ.cf << 動作のチェックはこれでできる。稼働してい る sendmail には影響はない。 # /usr/lib/sendmail -bt -C ZZZ.cf > 3,0 user1@hostF.nix.co.jj canonify input: user1 @ hostF . nix . co . jj Canonify2 input: user1 < @ hostF . nix . co . jj > Canonify2 returns: user1 < @ hostF . nix . co . jj . > canonify returns: user1 < @ hostF . nix . co . jj . > parse input: user1 < @ hostF . nix . co . jj . > Parse0 input: user1 < @ hostF . nix . co . jj . > Parse0 returns: user1 < @ hostF . nix . co . jj . > Parse1 input: user1 < @ hostF . nix . co . jj . > Parse1 returns: $# smtp $@ hostF.nix.co.jj. $: user1 <@ hostF.nix.co.jj.> parse returns: $# smtp $@ hostF.nix.co.jj. $: user1 <@ hostF.nix.co.jj.> ---------------------------------------------------------------------------------- parse returns: $# smtp $@ hostF.nix.co.jj. $: user1 <@ hostF.nix.co.jj.> ↓元はこのようだった。一部詰めて表示した。 parse returns: $# smtp $@ hostF . nix . co . jj . $: 1つブランクで続く user1 < @ hostF . nix . co . jj . > ---------------------------------------------------------------------------------- [ パソコンで ZZZ.mc ファイルの編集 ] パソコンのハイパ−タ−ミナルでマシンに telnet して vi 作業する。ハイパ−タ−ミナ ルの設定で BackSpace キ−の送信方法が "Ctrl+H" なっているのを "Del" に変更しただ けで、編集作業ができた。パソコンの BackSpaceキ−が1文字後退になった。他、エミュ レ−ション [自動検出]、Telnetタ−ミナルID [ANSI]。 "ファンクションキ−、方向キ−、 Ctrlキ−の使い方" は、◎タ−ミナルキ− が最初なっていた。Windowsキ−にしたら、矢 印キ−は有効になったみたいだが、BackSpace キ−がおかしくなってしまった。 * Mail-Store 予備機と FortiMail でテスト --- ZZZ.mc 調整その2 ZZZ.mc の {2} の記述を少し変更して、ホストhostF へ user1@nix.co.jjとして送るよう にしてみる。これで user1@nix.co.jj として FortiMail に送ることができる。これによ り FortiMail で user1@hostF.nix.co.jj というメ−ルを処置しなくてもいい。 ZZZ.mc ------------------------------------------------------------------------- | | |LOCAL_NET_CONFIG |dnl R$* < @ $* .$m. > $* $#smtp $@ $2.$m. $: $1 < @ $2.$m. > $3 {2} |R$* < @ $* .$m. > $* $#smtp $@ $2. $: $1 < @ $m. > $3 {2'} |MAILER(`local') |MAILER(`smtp') # /usr/lib/sendmail -bt -C ZZZ.cf > 3,0 user1@hostF.nix.co.jj | Parse1 returns: $# smtp $@ hostF . $: user1 < @ nix . co . jj . > parse returns: $# smtp $@ hostF . $: user1 < @ nix . co . jj . > -------------------------------------------------------------------------------- "R$* < @ $* .$m. > $* $#smtp $@ $2. $: $1 < @ $m. > $3" {3} ↓ {3} の記述はこのように詰めてもいい。タブコ−ドには注意がいるが。 "R$* <@$*.$m.>$* $#smtp $@ $2. $:$1<@$m.>$3" -------------------------------------------------------------------------------- 細かな動作確認をしてみた。"$2. $:$1<@$m.>$3" 部はピリオドなしで "$2 $:$1<@$m>$3" これでも問題なかった。"$2." はル−ル展開されて、 ここでの場合は hostF が入るのだ から初めから "R$* <@$*.$m.>$* $#smtp $@ hostF. $:$1<@$m.>$3" と記述してしまうの もいいかも知れない。ロ−カルのメ−ル配信のル−ルで、 ここには xxx.nix.co.jj ヘの メ−ルしか合致しないはずであるから。もう1つ確認した、{2} もコメントを外したらど うなるか。多分 {2} は評価されるが、そのまま下に降りてきて {2'} も評価され、 {2'} のル−ルでメ−ル配送は実施された。だから {2'} を書くのなら {2} は意味なしとなる。 数ヶ月して追記。"R$* <@$*.$m.>$* $#smtp $@ hostF. $:$1<@$m.>$3" で、"$2." でなく "hostF." の場合のメリット。 "$2." だとメ−ルアドレスによっていろいろ変わってくる、 user1@sub1.nix.co.jj では sub1 と解釈、user2@sub2.nix.co.jj では sub2 と解釈され る。"hostF." だとどんなメ−ルアドレス xxx@yyy.nix.co.jj というのが来ても、yyy 部 は hostF と解釈されることになる。この制御ル−ルの記述の hostF はメ−ルを転送する 先のホスト名として用いている。常に hostF という FortiMail 装置へメ−ルを転送した い訳である。実際のメ−ルストアの Sun のマシンの設定はこのようにしてみた。 * Mail-Store 予備機から FortiMail へメ−ル転送 1)パソコンのメ−ルソフトからメ−ルストア MS予 へ user1@nix.co.jj宛にメ−ルを送る。 メ−ルストア MS予 で aliases 展開され user1@hostF.nix.co.jj 宛のメ−ルになる。 2)user1@hostF.nix.co.jj が MS予 の ZZZ.mc で解釈され、"ホスト hostF"宛にメ−ルア ドレス user1@nix.co.jj に送られる。 3)メ−ルソフトで POP3サ−バを FortiMail である 192.168.1.9 にしてuser1@nix.co.jj にメ−ルが届いていることを確認する。 MS予 MS新 PC /etc/mail/aliases /etc/hosts □hostY □hostF △ ------------------- ------------------ |.8 |.9 |.7 | | | | ------------------------- 192.168.1.0 |user1: user1@hostF |192.168.1.9 hostF # kill この sendmail ( sendmail -bd -q1h -C/etc/mail/sendmail-tx.cf ) # cd /usr/lib/mail/cf # /usr/lib/sendmail -bd -q1h -C ZZZ.cf (4) メ−ルストア間のメ−ル転送の注意 `2d/10 * /etc/aliases の挙動の確認 /etc/aliases の基本 左辺の user1 と minna は/etc/passwd に無くてもい --------------------- い。メ−ル転送の識別名としての役目をするのみ。 |user1: user2 user1 さん宛のメ−ルは user2 さんに送る。 |user3: \user3,user4 user3 さん宛のメ−ルは自身と user4 さんに送る。 |minna: user1,user2 minna 宛のメ−ルは user1 と user2 に送る。 /etc/aliases 単純にはこんなように全部のユ−ザをかけばいいのか。 ---------------------------- 別にリストアップしたファイルを作って includeする | | か、ダメだ include はそうした使い方ではない。 そ |user1: \user1,user1@hostF れで 500とか 1000 とかのメ−ル転送の記述ができる |user2: \user2,user2@hostF のか。UNIXのデ−タベ−スを使うのだが、昔はそ |user3: \user3,user3@hostF んなに多くは記述できなかった。20〜30位のものと言 | | われていた。Solaris 9 で 500位書いて #newaliases |user99:\user99,user99@hostF やったけど問題なかった。大丈夫だろう。 /etc/aliases ここの様子では root 宛のメ−ルが出ていたというこ ---------------------- と。root 宛は展開されて user1 宛になっていた。 |bin: root | | FortiMail でもユ−ザ root と user1がいるというこ |decode: root と。nobody はどうなのか。Postmaster はどうなのか。 |nobody: /dev/null |Postmaster: /dev/null MAILER-DAEMON は sendmail デ−モンから出ていたと |MAILER-DAEMON: user1 思うが。FortiMail では出るのか。出ないのでないか。 |root: user1 Postmaster からのメ−ルは通知などで出てくる。 * /etc/aliases の重大注意事項 「UNIX Network sendmail メ−ルサ−バの構築と管理」2002年2月25日初版、ソフトバンク パブリッシング(株)。 P.155 の記述で /etc/mail/aliases で "user1: \user1"とすると、 ユ−ザのホ−ムディレクトリの .forward ファイルの解釈を行わないようになる。もう1 つ分かったことで .forward ファイルで、"\" 即ちバックスラッシュを使う説明はよくあ るが、aliases ファイルでも使えることは、探してもまるで書かれていなかった。自分宛 にもメ−ルを残すことができないと、今回の企みはできないことになった。手元の本など を調べて aliases でも "\" 指定で自分宛に残すことができることが分かった。 * ファイルの連結 cat コマンド # cat p2 >> p1 これはマシンのアカウントのファイル passwd や groupそれに shadow の内容をコピ−するのにも使うことができる。 例えば p1 p2 p1 既存のマシン SPARCstation 5 Solaris 2.6 があって、たくさ --- --- --- んのユ−ザのアカウントを登録してあるとしよう。それを新し |1 |4 |1 いマシン Sun Fire V210 の Solaris 9 にしたい。このような |2 |2 場合に新旧の passwd ファイルで、cat コマンドで移行するこ |3 |3 とができる。shadowの暗号化パスワ−ドもそのまま移る。アカ もともと |4 ウント情報のファイルをいじるのはなかなかリスキ−なのだが。 * Mail-Store 現行機にて動作の確認 このマシンではDNSも見るようにしている。/etc/nsswtich.conf "hosts: files dns" としてある。予備機では /etc/nsswtich.conf "hosts: files" である。 この違いは影響 してこないのか。現行機では ZZZ.mc の hostF を /etc/hosts を見るのか、 ひょっとし てDNSを見るのでないか。本番機で試してみるのが確認としては確実。えいやでやって みるしかない。やってみました、大丈夫でした。 # cd /usr/lib/mail/cf # /usr/ccs/bin/make ZZZ.cf # /usr/lib/sendmail -bt -C ZZZ.cf > 3,0 user1@hostF.nix.co.jj << この表示は Mail-Store予備機と同じになった。 ZZZ.mc ------------------------------------------------------------------- | | |LOCAL_NET_CONFIG |R$* < @ $* .$m. > $* $#smtp $@ hostF. $: $1 < @ $m. > $3 |MAILER(`local') |MAILER(`smtp') # kill この sendmail ( sendmail -bd -q1h -C/etc/mail/sendmail-tx.cf ) # /usr/lib/sendmail -bd -q1h -C ZZZ.cf * 2つのメ−ルストアでのメ−ル転送の注意 `2e/03 メ−ルストア1つのマシンで同じメ−ルアドレスのエイリアスとフォワ−ドの設定がある 場合は、フォワ−ドの設定は無視される。そのため MS1 からはuser1@keitai.ne.jj へメ −ルは行かない。エイリアスで MS2 にもメ−ルが行く。MS2ではフォワ−ドは有効であり user1@keitai.ne.jj へメ−ルは行く。 そして携帯会社のメ−ルサ−バにてこんなメ−ル アドレスはないと user1@nix.co.jj にエラ−メ−ルを返す。 このメ−ルはメ−ルリレ− からメ−ルストアの MS1 へとやってくる。 そしてこのエラ−メ−ルをエイリアスにより また MS2 に転送するということになる。 これでメ−ルの無限ル−プが起きることになる。 一番初めに MS2 から送った user1@keitai.ne.jj メ−ル。 このメ−ルの本文と添付ファ イルがあれば、それもエラ−メ−ルとなってぐるぐる回る度に、メ−ルの内容が追加され ていく。メ−ルサイズがどんどん大きくなっていく。 携帯会社から出たエラ−メ−ルが 携帯会社でこのアドレス MS1: Solaris 9 user1@nix.co.jj 宛に返って来る。 の契約は無くなっていた。 MS2: FortiMail | | × user1@keitai.ne.jj ↓ ↑user1@keitai.ne.jp ↑ 携帯会社のメ−ルサ−バ |このメ−ルは出ない。 | にメ−ルアドレスはなし。 MRから --------- --------- ---> | MS1 | user1@nix.co.jj | MS2 | PCから --------- 転送 ------> --------- ---> | | MS1 の ~/.forward 相当の ----------------------------------------- 同じ転送設定あり。 [ MS1 のメ−ル転送の設定 ] /etc/aliases ~/.forward -------------------------- -------------------------- |user1: \user1,user1@hostF |\user1,user1@keitai.ne.jj sendmail.cf はメ−ルが無限ル−プに陥らないように、何回かメ−ルが回ってきたらデフ ォオルトで破棄するようになっている。FortiMail でも同様の処置はどうもデフォルトで なっているようである。しかしどうも、メ−ルストア単体でメ−ルがル−プした場合に有 効に働くのでないか。このように2つのメ−ルストアでル−プができる場合では、有効に ならないのでないか。実際起こった現象からは結果として、そういうことが言える。携帯 会社あるいはプロバイダへのメ−ル転送で、存在しないメ−ルアドレスだとこのル−プが 起きる。あるいは携帯会社などのメ−ルサ−ビスが停止してもル−プは起こるはずである。 このことは新旧のメ−ルストア間で、このような方法でメ−ルデ−タをコピ−する大きな 注意点となる。移行の間は携帯には転送しないのが無難である。 あるいは MS1 でフォワ −ドではなく、一時的にエイリアスで転送すれば問題は起こらないかも知れない。 * こんなメ−ル転送のテストもやってみた `2e/03 PC user1@nix.co.jj MS1 user1@nix.co.jj MS2 □ ------> □ 転送 ------> □ user1 ユ−ザの登録なし | | | ------------------------------------------------------ /etc/aliases -------------------------- |MAILER-DAEMON: user1 << これでエラ−メ−ルができたのかな。 |user1: \user1,user1@hostF ------------------------------------------------------ こんなエラ−メ−ルがMS1 |差出人: Mail Delivery Subsystem [MAILER-DAEMON] から出て PCのメ−ルソフ |宛先 : user1@nix.co.jj トに返ってきた。 |件名 : Returned mail: see transcript for details | |The original message was received at 日付 from localhost [127.0.0.1] |--- The following addresses had permanent fatal errors --- |user1@hostF (reason: 550 5.1.1 ... User unknown) (5) メ−ルストアを FortiMail へ移行 * メ−ルストアを Solaris9 から FortiMail へ−失敗したら メ−ルストアの移行がしばらくして、うまく行ってないことに気付いた場合にどうするか。 メ−ルは FortiMail が受け取ってしまっている。このメ−ルを Solaris 9 にコピ−して、 また Solaris 9を本番機にするということになるが。これは実質できないのでないか。一 応、この検討もやっておかないといけないか。ここまで書いて筆が止まってしまった。数 ヶ月過ぎてもそのままだった。多分、打つ手はない。どうしてもという場合は FortiMail が受信したメ−ルは諦めるしかないだろう。とりあえずメ−ルサ−バのサ−ビスを停止さ せる訳にはいかない。Solaris 9 のこれまでのメ−ルストアを再度、スタンバイさせ稼働 させるしかない。 ひょっとすると IMAP4 でメ−ルを個別に取り出してやることができる かも知れない。しかしすごい手間がかかる。 * メ−ルストア移行準備 /etc/mail/aliases bin〜nobody は FortiMail では関係ないはず。 Postmaster ----------------------- は必要だと思う。FortiMail からも何かの場合にこのメ−ル |bin: root アドレスからメ−ル発信される。MAILER-DAEMON と root は |daemon: root いらないのでないか。 /etc/aliases は /etc/mail/aliases |system: root へのリンクになっている。aliases で "soumu:user1,user2" |toor: root というのがあったとする。 これは下記 tuika ファイルには |uucp: root 入れないこと。どっちかの記述が無視されるのだったか、有 |manager: root 効に働くと FortiMail にメ−ル転送されて、 また展開され |dumper: root ることになる。FortiMail ではフォワ−ドとエイリアスの設 |operator: root 定もやっておくということで。 |decode: root |nobody: /dev/null /etc/mail/tuika # cd /etc/mail |Postmaster: /dev/null --------------------------- # cp aliases aliases.ORG |MAILER-DAEMON: user1 |user1: \user1,user1@hostF # cat tuika >> aliases |root: user1 |user2: \user2,user2@hostF # newaliases | | | | |soumu: user1,user2 |user599: \user599,user599@hostF * 全メ−ルの転送を開始 ※AD( Active Directory ) Solaris 9 で #newaliases と叩いたら開始である。約 500 のメ−ルアドレスのユ−ザ認 証を AD で行なう。エイリアスでのメ−ル転送ゆえ、 MS1 にメ−ルが来たら MS2 に行っ てユ−ザ認証をする。一挙に MS2 にメ−ルが押し寄せて、AD にも問い合わせが殺到する という事態にはならない。それ故 AD に大きな負荷が一時的にかかるということはないだ ろうと判断した。MS2 の FortiMail のログを監視した。User unknown になっているメ− ルがないかを調べるのである。AD にユ−ザ名はあっても、 メ−ルアドレスが登録されて ないのがあるかも知れない。一応 Outlook Express の人の検索で、AD 登録の状態を全ユ −ザ、チェックはしたのだが。結果的に幾つか漏れがあった。 AD にはそもそもメ−ルア ドレスは記載してなかった、必要がなかったから。しばらくすると外からの迷惑メ−ルで User unknown になるケ−スがでてきて、ごちゃまぜになり、AD 登録のチェックはやめた。 * 予期しないトラブルが 上記のエラ−メ−ルによるル−プが発生し、現メ−ルストアが機能停止した。エラ−メ− ルは発信元のユ−ザにも行っているが、生憎出社してなかった。現メ−ルストアのログを 確認すべきであった。そしたら異常が生じていることがすぐに分かったのだが。しかし今 はメ−ルストアの機能を回復させることが先決である。 telnet してマシンに入ることは できた。/var/adm/messages それに /var/log/syslog ファイルを見た、ディスクの /var パ−ティションがフルになっていた。 messages にはディスクが一杯になったというログ "/var: file system full" という記述のログが4秒から10秒間隔で出ていた。 syslog はメ−ル送受信のログである。しまいには /var パ−ティションはエラ−メ−ルで一杯に なりログさえ記録するスペ−スが無くなってしまっていたということになる。 # tail /var/adm/messages こんな感じで出ていた。 03:00:01 hostB tmpfs: [ID 51845 kern.warning] WARNING: /tmp: File system full, swap space limit exceeded 06:00:04 hostB ufs: [ID 84554 kern.notice] NOTICE: alloc: /var: file system full 06:00:08 hostB ufs: [ID 84554 kern.notice] NOTICE: alloc: /var: file system full | 存在しないメ−ルアドレスへの転送メ−ルがエラ−メ−ルになって、ル−プしてしまい最 終的にディスクを一杯にして、メ−ルストアが機能停止に陥った。ともかく容量を少しで も空けることが肝要。スプ−ル領域を以前にコピ−したディレクトリの中身をまずは消し た。これで /var は 98% になった。 /var/spool/mqueue-rx と /var/spool/mqueue 内に 一杯溜まっていた。問題となったメ−ルアドレスで溜まっているメ−ルを消すことにした。 下記のこんなコマンドで消すことができる。だいぶ前に実際に使用した。これで残ったメ −ルは # ls -l | wc -l やって数えた。mqueue には数十、mqueue-rx は5千通ぐらいあ った。ともかくこれでメ−ルサ−バとして動けるようになった。 # grep -l "mondai@nix.co.jj" d* | sed 's/d/q/' | awk '{print "rm",$1}' | sh # grep -l "mondai@nix.co.jj" d* | awk '{print "rm",$1}' | sh スプ−ルに残ったメ−ルをリストしてみた。 # mailq /var/spool/mqueue (10 requests) -----Q-ID----- --Size-- -----Q-Time----- ------------Sender/Recipient----------- s2CIHfjV017653 1 Thu Mar 13 03:17 <> (Deferred: 450 4.2.0 /var/mail/mondai: File too large) \\mondai s2CK3NjV007698 1 Thu Mar 13 05:03 <> (Deferred: 450 4.2.0 /var/mail/mondai: File too large) \\monndai |以下続く # mailq -C /etc/mail/sendmail-rx.cf << mqueue-rx はこのコマンドで見た。 /var/mail/mondai メ−ルボックスがすごく大きいサイズになっていた。/var 内の容量を 空けるため、これを他の余裕あるパ−ティションに移動させた。約2GB のファイルだった。 /var はそもそも 20GB 位しかなかった。FortiMail の方はどうなっているか、mondai さ んのWebメ−ルで様子を見ることができた。割り当てのメ−ル保存容量が一杯になって いた。全ユ−ザそれぞれに 2GB ぐらい割り当てていた。mondai さんのWebメ−ルにロ グインしてエラ−メ−ルをどんどん消して、メ−ルの件名も見て必要なメ−ルだけにした。 現メ−ルストアの InterScan のログも見てみた。[ログ]->[クエリ] 画面で、種類 [メッ セ−ジ追跡 ▽] 受信者:[ mondai@nix.co.jj ]。エラ−メ−ルが大量に出ていた、3秒 間隔で出ていたログだ、Return mail: see transcript for details。ここには 約 2万通 のエラ−メ−ルのログが出ていた。このログの見方、もっと前に気付いていればよかった。 ある人のメ−ルの送受信の履歴をリストできる。今回このどさくさでメ−ルが紛失してな いか、このログで調べてみた。何せパ−ティションが一杯になってしまったのだから。 * 溜まったメ−ルの処理 現メ−ルストアの /var パ−ティションが空いたので、# /etc/rc2.d/S88sendmail start をやった。InterScan にもWebアクセスできなくなっていたのでこれもデ−モンを起動 し直した。これで溜まってメ−ルの処置と内外からのメ−ルを受け付けるようになる。メ −ルは処理はどんどん捌いているという感じではない。 sendmail デ−モンの数を見ても、 10個もない。 多分 sendmail.cf で sendmail デ−モンの最大数の指定が関係している。 それを調べている余裕はない。へたにいじってトラブルをより悪化させてはならない。強 制的にメ−ルを吐き出すコマントも打ってみたが、あまり変わり映えしなかった。じっと 待つしかない。約2時間で mqueue-rx のメ−ルはほぼ配信され正常になった。 残ってい たメ−ルは昨日までの数日分の迷惑メ−ルだった。more や cat コマンドで中身を表示し てみた。もしまともなメ−ルが残っていたら、それはこの後に処理することになる。 # /usr/lib/sendmail -q -C /etc/mail/sendmail-rx.cf # /usr/lib/sendmail -q << これは -C /etc/mail/sendmail-tx.cf と内容は同じ。 * メ−ルストアの交換を 現メ−ルストアの Solaris 9 マシンのIPアドレスを AAA、FortiMail は BBB としよう。 Solaris 9 では #/etc/rc2.d/S88sendmail stop をやった。そして # ifconfig bge0 CCC。 FortiMail では [システム]->[ネットワ−ク]->[インタ−フェ−ス]の port1 のIPアド レスを AAA にした、一瞬でIPアドレスが変わることは事前にテストして確認した。 メ −ルリレ−の /etc/hosts でこれらのホスト名とIPアドレスの対応を変更した。これで メ−ル送受信を確認する。外の自分宛にメ−ルを送り返って来たのを確認した。メ−ルス トアとメ−ルリレ−間でちゃんと連携できている。ここでつまずくと、ちょっとばかり事 態は深刻になる。祈るような気持ちで、エイヤ!でやるのである。Solaris 9 にまだまと もなメ−ルが溜まっていれば、これもエイリアス転送で処理できる。各自考えてみること。 * メ−ルを FortiMail から FortiMail へ−FortiMail 本番機が故障 いったんメ−ルストアを Solaris9 から無事 FortiMail へ置き換えができたと、 その後 に FortiMail が故障したという場合のことである。 本番機はオンサイト保守にしている のでSI業者が直にやってくるはずである。それでもうまく事が運んでも半日ぐらいは復 旧にかかるだろう。メ−ルストアの予備機はもう1台の FortiMail にするか、 これまで の Solaris9 にするか。FortiMail だろうな。 Solaris9 のメ−ルストアはメ−ルシステ ムとしてのバックアップに設置しておくことにするつもりだから。となると FortiMail間 のメ−ルデ−タの移行ができるか、どうやってやるかということになる。とりあえずまだ 箱に入れてある FortiMail-200D を電源入れてライセンスのことも見てみないと。ここま で書いて何ヶ月かほかっていた。いいアイデアはないな、こんなんでは出来んぞ。 * mailq コマンドのおさらい # mailq << -C /etc/mail/sendmail-tx.cf 指定と同じ。 /var/spool/mqueue is empty Total requests: 0 # mailq -C /etc/mail/sendmail-tx.cf /var/spool/mqueue is empty Total requests: 0 # mailq -C /etc/mail/sendmail-rx.cf /var/spool/mqueue-rx is empty Total requests: 0 ------------------------------------------------------------------------------------ [ 付録 ] メ−ルの基本をおさらいしておく `2d/10 * aliases メ−ル転送の記述の長さは # cd /etc # ls -al aliases lrwxrwxrwx 1 root root 14 1月 30日 2006年 aliases -> ./mail/aliases # cd /etc/mail # ls -al aliases -rw-r--r-- 1 root other 3001 2月 6日 12:01 aliases /etc/mail/aliases ------------------------------- |bin: root newaliases やって出てきた 45 はbin |daemon: root から eigyou_mlまでの縦のエントリ数。 |system: root longest 130 bytes というのはこの長 | | さのこと。長さはどれ位まで許される |user1: \user1,user1@hostF のか。少なくとも130 bytes までよし。 | | | |sekkei_ml: katou,satou,mutou,............................,haruo ↓ |eigyou_ml: murase,haruo,kawagu,...............................,hideo # newaliases /etc/mail/aliases: 45 aliases, longest 130 bytes, 1539 bytes total * sendmail.cf の動作や解釈のおさらいで抜粋 自分の書いた "14-1. 電子メ−ル設定の基本,(2) sendmail.cf について"、mail_bas.txt を参考にした。また当時勉強したトッパン刊の「インタ−ネット構築入門」も改めて目を 通してみた。手元の本で、sendmail.cf のル−ルの理解にはこれしかないか。だいぶ前か ら本屋に並んでいるのは見ないが。 手元の雑誌として「Interface」 Mar.1996 があった。P.147〜156, "Chapter.4 UNIXにおける電子メ−ル・システムの実現"。こ こにも sendmail.cf の読み方が詳しく説明されてあった。 [ 例1 ] --------------------------------------------------------- |DDnix.co.jj << ホストのドメイン名。 |DMtcp << SMTP でメ−ルを転送する。 | | |CS cad gear << C はクラス定義を表わす。S というクラスがト−クン cad, gear を | | もつ。 |R$*<@$=S.$D>$* $#$M $@mail_relay.$2.$D $:$1<@$2.$D>$3 << ル−ルセット。 $+ 1個以上のト−クン *** 大文字、小文字は区別しない *** $- ちょうど1個のト−クン $* 0個以上のト−クン $=class_name クラスの値に1つマッチする $=S は cad, gear とマッチしているか調べていることになる。 結局 R$*<@$=S.$D>$* は katou@cad.nix.co.jj や haruo@gear.nix.co.jj といった文字列になっているかどうか調 べている。 [ 例2 ] /etc/aliases ----------------------------- |katou:katou@hostA.nix.co.jj ---------------------------------------------- |DDnix.co.jj | | |R$*<@$-.$D>$* $#$M $@$2.$D $:$1<@$2.$D>$3 [a] |R$*<@$+>$* $#$M $@$2 $:$1<@$2>$3 [b] 1) このような状況で katou 宛に電子メ−ルを送ると、エイリアス展開されて [a] のと ころでは katou@hostA.nix.co.jj となって入ってくる。ちょうど [a] の左のル−ル セットにマッチするので、それに続く評価がされ sendmail.cf を抜けることになる。 SMTP で配送 ↓ R$*<@$-.$D>$* $#$M $@$2.$D $:$1<@$2.$D>$3 ↑ ↑ ↑ ↑ katou@hostA.nix.co.jj hostA katou hostA $3 は何もなし。 配送先の 配送先の電子メ−ルアドレス ホスト名 2) 外部宛の電子メ−ル、 例えば hanako@iij.ad.jp は [a] のル−ルにマッチしないの で、下に降りてきて [b] のル−ルにマッチするかチェックする。 R$*<@$+>$* の $+ は1個以上のト−クンなので、マッチする。 R$*<@$+>$* $#$M $@$2 $:$1<@$2>$3 ↑ ↑ ↑ ↑ hanako@iij.ad.jp iij.ad.jp hanako iij.ad.jp $@$2 は配送先のドメイン名となる。iij.ad.jp の DNS にアクセスして MX レコ−ド を調べ、iij.ad.jp のメ−ルサ−バのIPアドレスを得る。そしてそのメ−ルサ−バ に SMTP で電子メ−ルを送る。iij.ad.jp のメ−ルサ−バはこの電子メ−ルを受ける と、自前の sendmail.cf により該当ユ−ザにメ−ルを配送することになる。 "14-1.電子メ−ル設定の基本" の サブドメイン対応の万能 sendmail.cf。 --------------------------------------------------------------------- |#################################################################### 関係する所 |# 万能 sendmail.cf ファイル [ made by katou refered to tic.com ] を抜粋した。 |# | |#################################################################### |DVnix.1.0 | | |# [ 2. サブドメインのメ−ルサ−バ用 ] |# |# メインドメインのメ−ルサ−バ名が host1 とした例。2行目に記入。 |# |#R$*<@$-.$D>$* $#$M $@$2.$D $:$1<@$2.$D>$3 |#R$*<@$+>$* $#$M $@host1.$D $:$1<@$2>$3 | | * それで今回の sendmail-tx.cf はこれでどうか `2h/09/E 見ていて、どうもおかしい気がする。 このファイルは sendmail-tx.cf を直接 いじったのものか、ZZZ.mc ファイルをいじったものか忘れてしまった。 ル−ルをいじって所望の形にもっていったところ。 ------------------------------------------------------------ | | |R$* < @ $* .$m. > $* $#smtp $@ $2.$m. $: $1 < @ $2.$m. > $3 |R$*<@$*.$D.>$* $#M $@$2.$D. $:$1<@$2.$D.>$3 << ここから3行目までは必要 |R$*<@$*.$D>$* $#M $@$2.$D $:$1<@$2.$D>$3 なのか、どうなのか忘れた。 | |R$*<@$-.$D>$* $#M $@$2 $:$1<@.$D>$3 |R$*<@$-.$m.>$* $#M $@$2 $:$1<@.$m.>$3 << これを追加すればいいかも。 |#R$*<@$-.$m.>$* $#M $@hostA $:$1<@nix.co.jj>$3 << または直接このように書く。 ↑ katou@xxx.nix.co.jj hostA katou@nix.co.jj * Solaris 9 の mail コマンド Solaris 9 にはメ−ルのプログラムは /usr/bin/mail と UCB mail がある。UCB mail は /usr/ucb/mail または /usr/ucb/Mail で、/usr/bin/mailx へのリンクになっている。 # which mail /usr/bin/mail # cd /usr/bin; ls -l mail -r-x--s--x 1 root mail 61416 ... mail # cd /usr/ucb;ls -l lrwxrwxrwx 1 root root ... mail -> ../bin/mailx lrwxrwxrwx 1 root root ... Mail -> ../bin/mailx # cd /bin; ls -l mailx -r-x--s--x 1 root mail 126700 ... mailx [ mail コマンドの使い方 ] # mail user1@nix.co.jj Subject: test1 konitiwa . << ピリオドを打って、これでメ−ル本文は終わりで送信します。 # /usr/ucb/mail -s "henomohe" user1 < "/temp/File" # /usr/ucb/mail -s "henomohe" user1 < /dev/null # df -k | /usr/ucb/mail -s "File Ippai" user1 > /dev/null 2>&1 # echo "222" | /usr/ucb/mail -s "henomohe" user1 * Apollo コンピュ−タのデフォルトの aliases の記述 /usr/lib/aliases ----------------------------------------------------------------- | | |# Alias for mailer daemon |MAILER-DAEMON:root | |# Following alias is required by the new mail protocol, RFC 822 |postmaster:root | |# Aliases to handle mail to msgs and news |msgs: "|/usr/ucb/msgs -s" << なんかこんなので、プログラム的に一括でやれな |nobody: /dev/null いか。やれそうな気がするが。